package com.java.prttern.notes;

import java.lang.reflect.InvocationTargetException;

public class ObjectFactory {
    //在shapeFactory1的基础上进一步扩展，针对多个接口实现一个公共的工厂类
    public <T> Object getObject(Class<T> clazz){
        if (clazz==null){
            return null;
        }
        Object obj=null;
        try {
             obj= Class.forName(clazz.getName()).newInstance();
        } catch (InstantiationException|IllegalAccessException |ClassNotFoundException e) {
            e.printStackTrace();
        }
        return obj;
    }

    //在jdk9中直接使用泛型的newInstance方法已经过时，重写的getClass（）方法如下
    public <T> T getClass(Class<? extends T> clazz){
        T obj=null;
        try {
            obj=clazz.getDeclaredConstructor().newInstance();
        } catch (ReflectiveOperationException e) {
            e.printStackTrace();
        }
        return obj;
    }
}
